#pragma once
#include "predef.h"
#include "exportsymbol.h"

namespace Pattern
{
	namespace Utility
	{
		PATTERN_API const std::string MakeCodeToString(Uint src);

		PATTERN_API Uint HashString(const std::string& source);
		PATTERN_API std::vector<std::string> SpliteString(const std::string& source,const std::string& delim);

		PATTERN_API Uint ToUint(const std::string& str);
		PATTERN_API ULong ToULong(const std::string& str);
		PATTERN_API UShort ToUShort(const std::string& str);
		PATTERN_API Uchar ToUchar(const std::string& str);
		PATTERN_API bool ToBool(const std::string& str);
		PATTERN_API char Tochar(const std::string& str);
		PATTERN_API int ToInt(const std::string& str);				
		PATTERN_API float ToFloat(const std::string& str);
		
		PATTERN_API const std::string ToString(const float value);
		PATTERN_API const std::string ToString(const Uint value);
		PATTERN_API const std::string ToString(const bool value);
		PATTERN_API const std::string ToString(const char value);
		PATTERN_API const std::string ToString(const int value);
		PATTERN_API const std::string ToString(const char* value);
		PATTERN_API const std::string& ToString(const std::string& value);
		
		PATTERN_API const std::string ToString(const ULong value);
		PATTERN_API const std::string ToString(const UShort value);
		PATTERN_API const std::string ToString(const Uchar value);



		inline int Toint(const std::string& str){return ToInt(str);}
		inline bool Tobool(const std::string& str){return ToBool(str);}
		inline size_t Tosize_t(const std::string& str){return ToUint(str);}
		inline float Tofloat(const std::string& str){return ToFloat(str);}
	};
}
